package com.zhiwen.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhiwen.domain.dto.CommentDTO;
import com.zhiwen.domain.entity.Comment;
import com.zhiwen.domain.vo.CommentCountVO;
import com.zhiwen.domain.vo.CommentVO;

import java.util.List;

/**
 * 评论服务接口
 */
public interface CommentService extends IService<Comment> {

    /**
     * 创建评论
     *
     * @param commentDTO 评论数据
     * @return 评论VO
     */
    CommentVO createComment(CommentDTO commentDTO);

    /**
     * 更新评论
     *
     * @param commentDTO 评论数据
     * @return 评论VO
     */
    CommentVO updateComment(CommentDTO commentDTO);

    /**
     * 根据ID获取评论
     *
     * @param id 评论ID
     * @return 评论VO
     */
    CommentVO getCommentById(Long id);

    /**
     * 删除评论
     *
     * @param id 评论ID
     * @return 被删除评论的回答ID
     */
    Long deleteComment(Long id);

    /**
     * 获取回答下的评论列表
     *
     * @param answerId 回答ID
     * @param page 分页参数
     * @return 评论分页数据
     */
    Page<CommentVO> getCommentPage(Long answerId, Page<Comment> page);

    /**
     * 获取指定用户的所有评论
     *
     * @param userId 用户ID
     * @param page 分页对象
     * @return 评论分页对象
     */
    Page<CommentVO> getUserComments(Long userId, Page<Comment> page);

    /**
     * 获取评论统计信息
     *
     * @param userId 用户ID
     * @return 评论统计信息
     */
    CommentCountVO getCommentCount(Long userId);

    /**
     * 批量删除指定回答下的所有评论
     *
     * @param answerId 回答ID
     * @return 删除的评论数量
     */
    int batchDeleteByAnswerId(Long answerId);

    /**
     * 获取最新评论列表
     *
     * @param limit 限制数量
     * @return 最新评论列表
     */
    List<CommentVO> getLatestComments(int limit);

    /**
     * 获取所有评论列表（管理员使用）
     * 如果answerId不为空，则获取特定回答的评论
     * 如果answerId为空，则获取所有评论
     *
     * @param answerId 回答ID(可选)
     * @param page 分页对象
     * @return 评论分页对象
     */
    Page<CommentVO> getAllComments(Long answerId, Page<Comment> page);
}
